﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZP.IDAL;
using AutoMapper;
using ZP.Model;
using ZP.DTO.Common;
using ZP.DTO.fz_sys_user;
using ZP.DTO.fz_sys_menu;
using ZP.DTO.fz_sys_role;
using ZP.DTO.fz_base_employee;
using ZP.DTO.fz_base_param;
using ZP.DTO.ep_base_info;
using ZP.DTO.ep_basic_data;
using ZP.DTO.ep_cert_qualified;
using ZP.DTO.ep_honor_title;
using ZP.DTO.ep_ip_info;
using ZP.DTO.ep_personnel_stats;
using ZP.DTO.ep_product_info;
using ZP.DTO.ep_user_rel;
using ZP.DTO.ht_type1_bak;
using ZP.DTO.ht_type1_file;
using ZP.DTO.ht_type1_title;
using ZP.DTO.ep_ht;
using ZP.DTO.ep_user;
using ZP.DTO.gt_task_tracking;
using ZP.DTO.ep_investor;
using ZP.DTO.ep_business_product;
using ZP.DTO.ep_personnel_info;
using ZP.DTO.ep_gov_support;

namespace ZP.BLL
{
    public class MapperConfig
    {
        //private static object _objLock = new object();
        private static bool _initFlag = false;

        /// <summary>
        /// 初始化
        /// </summary>
        public static void Initialise()
        {
            #region 实体和Model映射
            if (!_initFlag)
            {
                Mapper.Initialize(cfg =>
                {
                    cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;

                    //fz_sys_user
                    cfg.CreateMap<fz_sys_user, fz_sys_userResultDTO>().ReverseMap();
                    cfg.CreateMap<fz_sys_user, fz_sys_userOperateDTO>().ReverseMap();
                    cfg.CreateMap<fz_sys_user, UserLoginDTO>().ReverseMap();

                    //fz_sys_menu
                    cfg.CreateMap<fz_sys_menu, fz_sys_menuResultDTO>().ReverseMap();
                    cfg.CreateMap<fz_sys_menu, fz_sys_menuOperateDTO>().ReverseMap();
                    cfg.CreateMap<fz_sys_menu, UserLoginDTO.CurrentUserAuthority>().ReverseMap();

                    //fz_sys_role
                    cfg.CreateMap<fz_sys_role, fz_sys_roleResultDTO>().ReverseMap();
                    cfg.CreateMap<fz_sys_role, fz_sys_roleOperateDTO>().ReverseMap();

                    //fz_base_employee
                    cfg.CreateMap<fz_base_employee, fz_base_employeeResultDTO>().ReverseMap();
                    cfg.CreateMap<fz_base_employee, fz_base_employeeOperateDTO>().ReverseMap();

                    //fz_base_param
                    cfg.CreateMap<fz_base_param, fz_base_paramResultDTO>().ReverseMap();
                    cfg.CreateMap<fz_base_param, fz_base_paramOperateDTO>().ReverseMap();

                    //ep_ht
                    cfg.CreateMap<ep_ht, ep_htResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_ht, ep_htOperateDTO>().ReverseMap();

                    //ep_base_info
                    cfg.CreateMap<ep_base_info, ep_base_infoResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_base_info, ep_base_infoOperateDTO>().ReverseMap();
                    cfg.CreateMap<ep_base_infoOperateDTO, ep_base_info>().ForMember(m => m.ep_basic_data, f => f.Ignore());
                    cfg.CreateMap<ep_base_infoOperateDTO, ep_base_info>().ForMember(m => m.ep_investor, f => f.Ignore());
                    cfg.CreateMap<ep_base_info, ep_base_infoResultDTO>().ForMember(m => m.ep_basic_data, f => f.Ignore());

                    //ep_basic_data
                    cfg.CreateMap<ep_basic_data, ep_basic_dataResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_basic_data, ep_basic_dataOperateDTO>().ReverseMap();

                    //ep_cert_qualified
                    cfg.CreateMap<ep_cert_qualified, ep_cert_qualifiedResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_cert_qualified, ep_cert_qualifiedOperateDTO>().ReverseMap();

                    //ht_honor_title
                    cfg.CreateMap<ht_honor_title, ht_honor_titleResultDTO>().ReverseMap();
                    cfg.CreateMap<ht_honor_title, ht_honor_titleOperateDTO>().ReverseMap();

                    //ep_ip_info
                    cfg.CreateMap<ep_ip_info, ep_ip_infoResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_ip_info, ep_ip_infoOperateDTO>().ReverseMap();

                    //ep_personnel_stats
                    cfg.CreateMap<ep_personnel_stats, ep_personnel_statsResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_personnel_stats, ep_personnel_statsOperateDTO>().ReverseMap();

                    //ep_product_info
                    cfg.CreateMap<ep_product_info, ep_product_infoResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_product_info, ep_product_infoOperateDTO>().ReverseMap();

                    //ep_user
                    cfg.CreateMap<ep_user, ep_userResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_user, ep_userOperateDTO>().ReverseMap();
                    cfg.CreateMap<ep_user, PortalUserLoginDTO>().ReverseMap();

                    //ep_user_rel
                    cfg.CreateMap<ep_user_rel, ep_user_relResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_user_rel, ep_user_relOperateDTO>().ReverseMap();

                    //ht_type1_bak
                    cfg.CreateMap<ht_type1_bak, ht_type1_bakResultDTO>().ReverseMap();
                    cfg.CreateMap<ht_type1_bak, ht_type1_bakOperateDTO>().ReverseMap();

                    //ht_type1_file
                    cfg.CreateMap<ht_type1_file, ht_type1_fileResultDTO>().ReverseMap();
                    cfg.CreateMap<ht_type1_file, ht_type1_fileOperateDTO>().ReverseMap();

                    //ht_type1_title
                    cfg.CreateMap<ht_type1_title, ht_type1_titleResultDTO>().ReverseMap();
                    cfg.CreateMap<ht_type1_title, ht_type1_titleOperateDTO>().ReverseMap();


                    #region GT
                    //gt_task_tracking
                    cfg.CreateMap<gt_task_tracking, gt_task_trackingResultDTO>().ReverseMap();
                    cfg.CreateMap<gt_task_tracking, gt_task_trackingOperateDTO>().ReverseMap();


                    //ep_investor
                    cfg.CreateMap<ep_investor, ep_investorResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_investor, ep_investorOperateDTO>().ReverseMap();

                    //ep_business_product
                    cfg.CreateMap<ep_business_product, ep_business_productResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_business_product, ep_business_productOperateDTO>().ReverseMap();

                    //ep_personnel_info
                    cfg.CreateMap<ep_personnel_info, ep_personnel_infoOperateDTO>().ReverseMap();
                    cfg.CreateMap<ep_personnel_info, ep_personnel_infoResultDTO>().ReverseMap();

                    //ep_gov_support
                    cfg.CreateMap<ep_gov_support, ep_gov_supportResultDTO>().ReverseMap();
                    cfg.CreateMap<ep_gov_support, ep_gov_supportOperateDTO>().ReverseMap();


                    #endregion

                });
                _initFlag = true;
            }
            #endregion
        }
    }
}
